package org.spark.api.util.hbase;

import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Scan;

import java.util.List;

/**
 * @author chenwy
 */
public interface HBaseDao<T> {

    /**
     * 获取某一行
     *
     * @param tableName
     * @param rowKey
     * @return
     * @throws Exception
     */
     T get(TableName tableName, byte[] rowKey);

    /**
     * 批量get
     * @param tableName
     * @param rowKeys
     * @return
     */
     List<T> get(TableName tableName, List<byte[]> rowKeys);

    /**
     * scan
     * @param tableName
     * @return
     */
    List<T> scan(TableName tableName);


    /**
     * 根据scan扫描
     * @param tableName
     * @param scan
     * @return
     */
    List<T> scan(TableName tableName, Scan scan);


    /**
     * 根据startRow和stopRow扫描
     * @param tableName
     * @param startRow
     * @param stopRow
     * @return
     */
    List<T> scan(TableName tableName, byte [] startRow, byte [] stopRow);



    /**
     * 根据rowKey前缀扫描
     * @param tableName
     * @param rowPrefix
     * @return
     */
    List<T> scan(TableName tableName, byte [] rowPrefix);


    /**
     * 删除
     * @param tableName
     * @param rowKey
     */
    void delete(TableName tableName, byte [] rowKey);


    /**
     * 批量删除
     * @param tableName
     * @param rowKeys
     */
    void delete(TableName tableName, List<byte[]> rowKeys);


    /**
     * 插入或修改
     * @param tableName
     * @param entity
     */
    void put(TableName tableName, T entity);


    /**
     * 批量插入或修改
     * @param tableName
     * @param entities
     */
    void put(TableName tableName, List<T> entities);
}
